package Vue;


import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import Methodes.Solution;


/**
 * Fenêtre d'affichage des résultats.
 * @author ejouini
 *
 */
public class Result extends JFrame implements ActionListener {

	/** Fentre principale du programme. */
	private JFrame fenetreMere;

	/** Panel contenant tous les éléments de cette fenêtre. */
	private JPanel panelPrincipal;

	/** JTextField permettant d'afficher le cout minimum solution. */
	private JTextField resultCout;

	private JTextField resultTemps;

	/** Variable contenant toutes les données de notre solution optimale. */
	private Solution solutionOptimale;

	/** Panel affichant les resultats par jour (dans des onglets) pour chaque centrales. */
	private JPanel panelResultJourCentral;

	/**
	 * Constructeur
	 */
	public Result (JFrame fenMere, Solution solutionOpt) {

		this.fenetreMere = fenMere;
		this.solutionOptimale = solutionOpt;
		
		//*** Creation des composants  ***//
		panelPrincipal = new JPanel();
		resultCout = new JTextField(4);
		resultTemps = new JTextField(4);
		JPanel panelHaut = new JPanel(new GridLayout(2,2));
		JPanel panelBas = new JPanel();
		JButton btnRetour = new JButton("Retour");
		afficherCentrales();
		JLabel lblCoutMin = new JLabel("Coût minimum");
		JLabel lblTempsExec = new JLabel("Temps d'execution (s)");
		JMenuBar menuBar = new JMenuBar();
		JMenu menuFichier = new JMenu("Fichier");
		JMenuItem itemQuit = new JMenuItem("Quitter");


		//*** Ajout des elements aux composants ***//
		menuFichier.add(itemQuit);
		menuBar.add(menuFichier);

		
		panelHaut.add(lblCoutMin);
		panelHaut.add(resultCout);
		panelHaut.add(lblTempsExec);
		panelHaut.add(resultTemps);
		
		panelBas.add(btnRetour);
		
		//*** Mise en place des interactions ***//

		itemQuit.addActionListener(this);
		itemQuit.setActionCommand("Quitter");
		btnRetour.addActionListener(this);
		btnRetour.setActionCommand("Retour");


		// Ajout des composants a la fenetre
		this.setJMenuBar(menuBar);

		panelPrincipal.add(panelHaut);
		panelPrincipal.add(panelResultJourCentral);
		panelPrincipal.add(panelBas);
		this.add(panelPrincipal);

		// On insere le cout minimal et le temps d'exec  dans l'affichage
		resultCout.setText((int)solutionOpt.getCoutMinimum()+"");		
		resultTemps.setText(Double.toString(solutionOpt.getTempExecution()/1000).substring(0, 4));
		
		//*** Mise en forme de la fenetre principale ***//
		setSize(new Dimension(600, 360));
		this.setTitle("Projet Stochastique : Résultats obtenus");
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible (true);
		this.setLocation(200, 200);

	}
	
	/**
	 * Méthode permettant d'afficher les résultats par centrales pour chaque onglets.
	 */
	private void afficherCentrales(){
	
		JTabbedPane jours = new JTabbedPane();
		
		PanelCentrales pc = new PanelCentrales(solutionOptimale,0);
		jours.addTab("Mardi", null, pc.getPanel(), "Production Mardi");
		
		PanelCentrales pc2 = new PanelCentrales(solutionOptimale,1);
		jours.addTab("Mercredi", null, pc2.getPanel(), "Production Mercredi");
		
		PanelCentrales pc3 = new PanelCentrales(solutionOptimale,2);
		jours.addTab("Jeudi", null, pc3.getPanel(), "Production Jeudi");
		
		PanelCentrales pc4 = new PanelCentrales(solutionOptimale,3);
		jours.addTab("Vendredi", null, pc4.getPanel(), "Production Vendredi");
		
		PanelCentrales pc5 = new PanelCentrales(solutionOptimale,4);
		jours.addTab("Samedi", null, pc5.getPanel(), "Production Samedi");
		
		PanelCentrales pc6 = new PanelCentrales(solutionOptimale,5);
		jours.addTab("Dimanche", null, pc6.getPanel(), "Production Dimanche");
		
		PanelCentrales pc7 = new PanelCentrales(solutionOptimale,6);
		jours.addTab("Lundi", null, pc7.getPanel(), "Production Lundi");
		
		this.panelResultJourCentral = new JPanel();
		this.panelResultJourCentral.add(jours);
		
	}

	/**
	 * Gestionnaire des actions sur la fenêtre.
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getActionCommand().equals("Quitter")) {
			fenetreMere.dispose();
			this.dispose();
		} else if(e.getActionCommand().equals("Retour")) {
			fenetreMere.setVisible(true);
			this.dispose();
		}
	}


}
